package eva.savant.businessobject.vt;

import eva.savant.businessobject.mt.Material;
import javax.persistence.*;
import java.math.BigDecimal;
import java.io.Serializable;

@Table(name="VT_PRECIO")
@IdClass(PrecioPK.class)
@javax.persistence.Entity(name = "vt.Precio")
public class Precio extends eva.savant.businessobject.Entity {

    @ManyToOne
    @JoinColumn(name = "ID_CANAL", insertable = false, updatable = false)
    private Canal canal; //ID Canal

    @ManyToOne
    @JoinColumn(name = "ID_MATERIAL", insertable = false, updatable = false)
    private Material material; //ID Material

    @Basic
    @Column(name = "GRUPO", length = 10, nullable = true)
    private Integer grupo; //Grupo de Precio

    @Basic
    @Column(name = "PRECIO", length = 14, precision = 4, nullable = false)
    private BigDecimal precio; //Precio

    @Basic
    @Column(name = "IMPUESTO", length = 14, precision = 4, nullable = false)
    private BigDecimal impuesto; //Impuesto ICE

    @Basic
    @Column(name = "DESCUENTO", length = 14, precision = 4, nullable = false)
    private BigDecimal descuento; //Descuento

    @Id
    @Column(name="ID_CANAL")
    private String canal_Id; //ID Canal

    @Id
    @Column(name="ID_MATERIAL")
    private String material_Id; //ID Material


    public Precio(Canal canal, Material material, Integer grupo, BigDecimal precio, BigDecimal impuesto, BigDecimal descuento, Integer operacionId, String sociedadId, Integer usuarioId) {

        this.canal= canal;

        this.canal_Id= canal != null? canal.getId() : null;

        this.material= material;

        this.material_Id= material != null? material.getId() : null;

        this.grupo= grupo;

        this.precio= precio;

        this.impuesto= impuesto;

        this.descuento= descuento;

        this.operacionId= operacionId;

        this.sociedadId= sociedadId;

        this.usuarioId= usuarioId;

    }

    public Precio() {

    }


    public Canal getCanal() {
    
        return canal;
    }
    
    public void setCanal(Canal canal) {
    
        this.canal = canal;

        this.canal_Id= canal != null? canal.getId() : null;
    }

    public Material getMaterial() {
    
        return material;
    }
    
    public void setMaterial(Material material) {
    
        this.material = material;

        this.material_Id= material != null? material.getId() : null;
    }

    public Integer getGrupo() {
    
        return grupo;
    }
    
    public void setGrupo(Integer grupo) {
    
        this.grupo = grupo;
    }

    public BigDecimal getPrecio() {
    
        return precio;
    }
    
    public void setPrecio(BigDecimal precio) {
    
        this.precio = precio;
    }

    public BigDecimal getImpuesto() {
    
        return impuesto;
    }
    
    public void setImpuesto(BigDecimal impuesto) {
    
        this.impuesto = impuesto;
    }

    public BigDecimal getDescuento() {
    
        return descuento;
    }
    
    public void setDescuento(BigDecimal descuento) {
    
        this.descuento = descuento;
    }

}

class PrecioPK implements Serializable {


    private String canal_Id;

    private String material_Id;


    public PrecioPK(String canal_Id, String material_Id) {

        this.canal_Id= canal_Id;

        this.material_Id= material_Id;

    }

    public PrecioPK() {

    }


    public String getCanal_Id() {
    
        return canal_Id;
    }
    
    public void setCanal_Id(String canal_Id) {
    
        this.canal_Id = canal_Id;
    }

    public String getMaterial_Id() {
    
        return material_Id;
    }
    
    public void setMaterial_Id(String material_Id) {
    
        this.material_Id = material_Id;
    }

    @Override
    public boolean equals(Object object) {

        if(object == null) return false;

        if(object == this) return true;

        if( !(object instanceof PrecioPK) ) return false;


        PrecioPK pk = (PrecioPK) object;


        return pk.getCanal_Id().equals(canal_Id) &&

               pk.getMaterial_Id().equals(material_Id);
    }

    @Override
    public int hashCode() {

        int hashCode = 17;

        hashCode = 31 * hashCode + canal_Id.hashCode();

        hashCode = 31 * hashCode + material_Id.hashCode();

        return hashCode;
    }

}
